//:C16:Shape.h
#ifndef SHAPE_H__
#define SHAPE_H__
#include <iostream>
#include <string>
class Shape
{
    public:
        virtual void draw() = 0;
        virtual void erase() = 0;
        virtual ~Shape(){}
};

class Circle : public Shape
{
    public:
        Circle(){}
        ~Circle()
        {
            std::cout << "Circle::~Circle\n";
        }
        void draw()
        {
            std::cout << "Circle::draw\n";
        }
        void erase()
        {
            std::cout << "Circle::erase\n";
        }
};

class Square : public Shape
{
    public:
        Square(){}
        ~Square()
        {
            std::cout << "Square::~Square\n";
        }
        void draw()
        {
            std::cout << "Square::draw\n";
        }
        void erase()
        {
            std::cout << "Square::erase\n";
        }
};

class Line : public Shape
{
    public:
        Line(){}
        ~Line()
        {
            std::cout << "Line::~Line\n";
        }
        void draw()
        {
            std::cout << "Line::draw\n";
        }
        void erase()
        {
            std::cout << "Line::erase\n";
        }
};
#endif
